home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGSCAL / TINYPASC.LZH / TUDECLS.PAS < prev    next >
Pascal/Delphi Source File  |  1986-02-17  |  3KB  |  82 lines

  1.   { TUDECLS -- Declarations for extended grammar system }
  2.  
  3.   type
  4.     SYMBOL = string[maxtoklen];
  5.     SYMTYPE = (RESERVED, SYMERR, USER, VAR_TYPE, FUNC_TYPE);
  6.     SYMTABP = ^symtabtype;
  7.     SYMTABTYPE = record
  8.                    { structure for <identifier>s and keywords }
  9.                    NEXT: symtabp;
  10.                    LEVEL: int;
  11.                    SYM: symbol;
  12.                    case SYMT: symtype of
  13.                      reserved: (TOKVAL: tokrange);
  14.                      var_type: (VADDR: integer);
  15.                         {relative to BP}
  16.                      func_type:
  17.                        (FADDR: integer;  {code location}
  18.                         PBYTES: integer;  {bytes of parameters}
  19.                         IS_ACTUAL,     {TRUE if an actual declaration
  20.                                           has been seen}
  21.                         IS_SYSTEM   {system procedure, demands special
  22.                                         treatment}
  23.                           : boolean);
  24.                      end;
  25.                      
  26.     SYMTABNAMES = array [symtype] of string9;
  27.   const SYM_NAMES: symtabnames = (
  28.                   'reserved ', 'symerr   ', 'user     ',
  29.                   'var_type ', 'func_type'
  30.                   );
  31.  
  32.   type
  33.     SEMTYPE = (OTHER, IDENT, FIXED, STRNG,
  34.                ADDOP, SUBOP, MPYOP, DIVOP,
  35.                ASSIGNOP, EXPR_LIST, WHILE_DO, STMTLIST,
  36.                FUNCALL, IF_THEN_ELSE);
  37.     SEMRECP = ^semrec;
  38.     SEMREC = record
  39.                case SEMT: semtype of   { semantic stack structure }
  40.                  ident: (SYMP: symtabp);
  41.                  fixed: (NUMVAL: integer);
  42.                  strng: (STX,         {index to string table}
  43.                          STRNGNUM: int);  {unique string code number}
  44.                  addop, subop, mpyop, divop,
  45.                  assignop,   {LEFT := RIGHT}
  46.                  expr_list,  {LEFT=> first, RIGHT=> rest}
  47.                  while_do,   {while LEFT do RIGHT }
  48.                  stmtlist,   {LEFT=> first, RIGHT=> rest}
  49.                     {also used for global list of strings GSLIST}
  50.                  funcall:    {LEFT ( RIGHT=> expr_list ) }
  51.                    (LEFT, RIGHT: semrecp);
  52.                  if_then_else:  {if B1 then S1 else S2}
  53.                    (B1, S1, S2: semrecp);
  54.                  end;
  55.  
  56.     SEMTABNAMES = array [semtype] of string7;
  57.   const SEM_NAMES : semtabnames = (
  58.                    'Other  ', 'Ident  ', 'Fixed  ',
  59.                    'String ',
  60.                    '+      ', '-      ', '*      ',
  61.                    '/      ', ':=     ',
  62.                    'ExprLis', 'WhileDo',
  63.                    'StmtLis', 'FunCall', 'IfThenE'
  64.                    );
  65.  
  66.   const
  67.     VARSIZE= 2;  {bytes in a word}
  68.     OPCD_POSITION= 10;   {tab position of opcode}
  69.     OPND_POSITION= 16;   {tab position of operand}
  70.     DEFAULT_RFILE= 'CON:';
  71.     DEFAULT_SFILE= 'CON:';
  72.  
  73.   var
  74.     LABCOUNT: integer;   {dummy label number}
  75.     TRCOUNT: integer;   {trace count}
  76.     LLEN: integer;       {line length}
  77.     MAIN_SYMP: symtabp;   {points to procedure MAIN}
  78.     NEXT_SNUM,           {next string label number}
  79.     PLEVEL: integer;     {nesting level}
  80.     GSLIST: semrecp;     {global list of literal strings}
  81.     COMMENT: string80;   {identifier comments in text}
  82.